﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;

namespace CassiniService
{
    [RunInstaller(true)]
    public partial class ProjectInstaller : System.Configuration.Install.Installer
    {
        public ProjectInstaller()
        {
            InitializeComponent();
        }
        public override void Install(IDictionary stateServer)
        {
            Microsoft.Win32.RegistryKey system,
             //HKEY_LOCAL_MACHINE/Services/CurrentControlSet
             currentControlSet,
             //.../Services
             services,
             //.../<Service Name>
             service,
             //.../Parameters - this is where you can put service-specific configuration
             config;
            try
            {
                //Let the project installer do its job
                base.Install(stateServer);
                //Open the HKEY_LOCAL_MACHINE/SYSTEM key
                system = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("System");
                //Open CurrentControlSet
                currentControlSet = system.OpenSubKey("CurrentControlSet");
                //Go to the services key
                services = currentControlSet.OpenSubKey("Services");
                //Open the key for your service, and allow writing
                service = services.OpenSubKey(this.serviceInstaller1.ServiceName, true);
                //Add your service's description as a REG_SZ value named "Description"
                //service.SetValue("Description", "Cassini");
                //(Optional) Add some custom information your service will use...
                int type = (int)service.GetValue("Type");
                //允许服务与桌面交互
                service.SetValue("Type", type | 256);
                //config = service.CreateSubKey("Parameters");
            }
            catch (Exception e)
            {
                Console.WriteLine("An exception was thrown during service installation:/n" + e.ToString());
            }
        }
        public override void Uninstall(IDictionary stateServer)
        {
            Microsoft.Win32.RegistryKey system,
             currentControlSet,
             services,
             service;
            try
            {
                //Drill down to the service key and open it with write permission
                system = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("System");
                currentControlSet = system.OpenSubKey("CurrentControlSet");
                services = currentControlSet.OpenSubKey("Services");
                service = services.OpenSubKey(this.serviceInstaller1.ServiceName, true);
                //Delete any keys you created during installation (or that your service created)
                //service.DeleteSubKeyTree("Parameters");
                //...
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception encountered while uninstalling service:/n" + e.ToString());
            }
            finally
            {
                //Let the project installer do its job
                base.Uninstall(stateServer);
            }
        }
    }
}
